/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Ventas;


import Controlador.Bean.Log.Log;
import Data.config.SessionFac;
import org.apache.ibatis.session.SqlSession;
import Controlador.Bean.Ventas.LineaPlan;
import Controlador.Bean.Ventas.PlanVentas;
import gui.General.Main;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;

/**
 *
 * @author Luis Enrique
 */
public class ServicioPlanVentas {
    
    java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date fecha= new Date();
    String f=sdf.format(fecha);
    
    private ServicioPlanVentas() {};
    
    static private ServicioPlanVentas servicioPlanVentas=null; 
		   
    public static ServicioPlanVentas getInstance(){    
        if(servicioPlanVentas==null) servicioPlanVentas= new ServicioPlanVentas();
        return servicioPlanVentas;
    }
      
    //INICIO PLAN VENTAS
    public String getCodPlanVentas(){
        String codigo;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            codigo = sqlsesion.selectOne("Data.Ventas.ServicioPlanVentas.getCodPlanVentas");			
            sqlsesion.close();
        }
        if(codigo!=null){
            int cod= Integer.parseInt(codigo.substring(3))+1;
            String defecto= "000000";
            String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));
            return codigo.substring(0,3).concat(temp);
        }
        else
             return ("PVE000001");
    }
    
    public int getCorrelativoPlanVentas(){
        Integer correlativo;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            correlativo = (Integer)sqlsesion.selectOne("Data.Ventas.ServicioPlanVentas.getCorrelativo");			
            sqlsesion.close();
        }
        if(correlativo!=null)
            return correlativo+1;
        else
            return (1);
    }
    
    public synchronized void registrarPlanVentas(PlanVentas plan){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.insert("Data.Ventas.ServicioPlanVentas.insertPlanVentas",plan);
            sqlsesion.commit();
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTPLANV","Registrar Plan de Ventas",f);
        }
    }
    
    public void eliminarPlanVentas (String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.update("Data.Ventas.ServicioPlanVentas.deletePlanVentas",codigo);
            sqlsesion.commit();
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTPLANV","Anular Plan de Ventas",f);
        }
    }
    
    public ArrayList<PlanVentas> seleccionarAllPlanes(){
        ArrayList<PlanVentas> planes;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<PlanVentas> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioPlanVentas.getAllPlanVentas");			
            planes = new ArrayList(temp);
            sqlsesion.close();
            //Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTPLANV","Seleccionar Planes de Ventas",f);
        }
        return planes;
    }
    
    public ArrayList<PlanVentas> seleccionarPlanes(PlanVentas plan){
        ArrayList<PlanVentas> planes;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<PlanVentas> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioPlanVentas.getPlanVentas",plan);			
            planes = new ArrayList(temp);
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTPLANV","Seleccionar Planes de Ventas",f);
        }
        return planes;
    }    
    
    public void actualizarPlanVentasEstado (String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.update("Data.Ventas.ServicioPlanVentas.actualizarPlanVentasEstado",codigo);
            sqlsesion.commit();
            sqlsesion.close();
        }
    }    
    
    public Date getFechaPlanVentas(){
        Date fecha;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            fecha = (Date)sqlsesion.selectOne("Data.Ventas.ServicioPlanVentas.getFechaPlanVentas");			
            if(fecha==null)
                return new Date();
            sqlsesion.close();
        }
        return fecha;
    }
    
    //FIN PLAN DE VENTAS
    
    //INICIO LINEA PLAN VENTAS
        
    public ArrayList<LineaPlan> seleccionarProdPlan(){
        ArrayList<LineaPlan> productos;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<LineaPlan> temp= (List)sqlsesion.selectList("Data.Ventas.ServicioPlanVentas.getProdPlan");			
            productos= new ArrayList(temp);
            sqlsesion.close();
        }
        return productos;
    }
    
    public ArrayList<LineaPlan> seleccionarProdPlan2(){
        ArrayList<LineaPlan> productos;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<LineaPlan> temp= (List)sqlsesion.selectList("Data.Ventas.ServicioPlanVentas.getProdPlan2");			
            productos= new ArrayList(temp);
            sqlsesion.close();
        }
        return productos;
    }
    
    public synchronized void registrarLineaPlan(ArrayList<LineaPlan> lineas,String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            for(int i=0;i<lineas.size();i++){
                lineas.get(i).setIdPlanVentas(codigo);
                sqlsesion.insert("Data.Ventas.ServicioPlanVentas.insertLineaPlan",lineas.get(i));
            }        
            sqlsesion.commit();
            sqlsesion.close();
        }
    }
    
    public ArrayList<LineaPlan> seleccionarLineasPlan (String codigo){
        ArrayList<LineaPlan> lineas;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<LineaPlan> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioPlanVentas.getLineasPlan",codigo);			
            lineas = new ArrayList(temp);
            sqlsesion.close();
        }
        return lineas;
    }   
    
    //FIN LINEA PLAN VENTAS
}
